//package base.view.ui
//
//import android.content.Context
//import android.graphics.*
//import android.util.AttributeSet
//import android.view.View
//import base.http.rxandroid.CustomDisposableSubscriber
//import io.reactivex.Flowable
//import io.reactivex.android.schedulers.AndroidSchedulers
//import java.util.concurrent.TimeUnit
//
///**
// * Created by jjw on 2018/5/7 0007.
// */
//class TaoProgressView : View {
//    companion object {
//        private val DEFAULT_MIN_WIDTH = 400
//        private val RED = 10
//        private val GREEN = 115
//        private val BLUE = 178
//        private val MIN_ALPHA = 30//最小不透明度
//        private val MAX_ALPHA = 255//最大不透明度
//        private val RADUIS_PERCENT = 0.65f//圆环外圆半径占View最大半径的百分比
//        private val WIDTH_PERCENT = 0.07f//圆环宽度占View最大半径的百分比
//        private val MIDDLE_WAVE_RADUIS_PERCENT = 0.9f//第二个圆出现时,第一个圆的半径百分比(即中间圆环的半径百分比)
//        private val WAVE_WIDTH = 5f//水波纹圆环宽度
//
//        private val doughnutColors = intArrayOf(Color.argb(MIN_ALPHA, RED, GREEN, BLUE),
//                Color.argb(MIN_ALPHA, RED, GREEN, BLUE),
//                Color.argb(MAX_ALPHA, RED, GREEN, BLUE))
//    }
//
//    private var paint = Paint()
//    private var width: Float = 0.0f
//    private var height: Float = 0.0f
//    private var currentAngle: Float = 0.0f//当前旋转角度
//    private var raduis: Float = 0.0f//自定义View的最大半径
//    private var firstWaveRaduis: Float = 0.0f
//    private var secondWaveRaduis: Float = 0.0f
//
//    constructor(context: Context?) : super(context) {
//        init()
//    }
//
//    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
//        init()
//    }
//
//    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
//        init()
//    }
//
//    private fun init() {
//        val disposableListener = object : CustomDisposableSubscriber<Long>(context) {
//            override fun onNext(t: Long?) {
//                invalidate()
//            }
//        }
//
//        this@TaoProgressView.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
//            override fun onViewDetachedFromWindow(v: View?) {
//                disposableListener.dispose()
//            }
//
//            override fun onViewAttachedToWindow(v: View?) {
//            }
//        })
//        Flowable.interval(15, TimeUnit.MILLISECONDS)
//                .observeOn(AndroidSchedulers.mainThread())
//                .subscribe(disposableListener)
//
//    }
//
//    private fun resetParams() {
//        width = getWidth().toFloat()
//        height = getHeight().toFloat()
//        raduis = Math.min(width, height) / 2
//    }
//
//    private fun initPaint() {
//        paint.reset()
//        paint.isAntiAlias = true
//    }
//
//    /**
//     * 当布局为wrap_content时设置默认长宽
//     */
//    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
//        setMeasuredDimension(measure(widthMeasureSpec), measure(heightMeasureSpec))
//    }
//
//    private fun measure(origin: Int): Int {
//        var result = DEFAULT_MIN_WIDTH
//        val specMode = MeasureSpec.getMode(origin)
//        val specSize = MeasureSpec.getSize(origin)
//        if (specMode == MeasureSpec.EXACTLY) {
//            result = specSize
//        } else if (specMode == MeasureSpec.AT_MOST) {
//            result = Math.min(result, specSize)
//        }
//        return result
//    }
//
//    override fun onDraw(canvas: Canvas) {
//        resetParams()
//
//        //将画布中心设为原点(0,0),方便后面计算坐标
//        canvas.translate(width / 2, height / 2)
//
//        //转动
//        canvas.rotate(currentAngle, 0f, 0f)
//        currentAngle = (currentAngle + 9f) % 360
//
//        //画渐变圆环
//        val doughnutWidth = raduis * WIDTH_PERCENT
//        //圆环外接矩形
//        val rectF = RectF(-raduis * RADUIS_PERCENT, -raduis * RADUIS_PERCENT, raduis * RADUIS_PERCENT, raduis * RADUIS_PERCENT)
//        initPaint()
//        paint.strokeWidth = doughnutWidth
//        paint.style = Paint.Style.STROKE
//        paint.shader = SweepGradient(0f, 0f, doughnutColors, null)
//        canvas.drawArc(rectF, 0f, 360f, false, paint)
//
//        //画旋转头部圆
//        initPaint()
//        paint.style = Paint.Style.FILL
//        paint.color = Color.argb(MAX_ALPHA, RED, GREEN, BLUE)
//        canvas.drawCircle(raduis * RADUIS_PERCENT, 0f, doughnutWidth / 2, paint)
//
//        //实现类似水波涟漪效果
//        initPaint()
//        paint.style = Paint.Style.STROKE
//        paint.strokeWidth = WAVE_WIDTH
//        secondWaveRaduis = calculateWaveRaduis(secondWaveRaduis)
//        firstWaveRaduis = calculateWaveRaduis(secondWaveRaduis + raduis * (MIDDLE_WAVE_RADUIS_PERCENT - RADUIS_PERCENT) - raduis * WIDTH_PERCENT / 2)
//        paint.color = Color.argb(calculateWaveAlpha(secondWaveRaduis), RED, GREEN, BLUE)
//        canvas.drawCircle(0f, 0f, secondWaveRaduis, paint)//这是半径较小的圆
//
//        initPaint()
//        paint.style = Paint.Style.STROKE
//        paint.strokeWidth = WAVE_WIDTH
//        paint.color = Color.argb(calculateWaveAlpha(firstWaveRaduis), RED, GREEN, BLUE)
//        canvas.drawCircle(0f, 0f, firstWaveRaduis, paint)//画半径较大的圆
//    }
//
//    private fun calculateWaveRaduis(waveRaduis: Float): Float {
//        var wave = waveRaduis
//        if (waveRaduis < raduis * RADUIS_PERCENT + raduis * WIDTH_PERCENT / 2) {
//            wave = raduis * RADUIS_PERCENT + raduis * WIDTH_PERCENT / 2
//        }
//
//        if (waveRaduis > raduis * MIDDLE_WAVE_RADUIS_PERCENT + raduis * (MIDDLE_WAVE_RADUIS_PERCENT - RADUIS_PERCENT) - raduis * WIDTH_PERCENT / 2) {
//            wave = waveRaduis - (raduis * MIDDLE_WAVE_RADUIS_PERCENT +
//                    raduis * (MIDDLE_WAVE_RADUIS_PERCENT - RADUIS_PERCENT) - raduis * WIDTH_PERCENT / 2) +
//                    raduis * WIDTH_PERCENT / 2 + raduis * RADUIS_PERCENT
//        }
//        wave += 0.6f
//        return wave
//    }
//
//    private fun calculateWaveAlpha(waveRaduis: Float): Int {
//        val percent = (waveRaduis - raduis * RADUIS_PERCENT - raduis * WIDTH_PERCENT / 2) / (raduis - raduis * RADUIS_PERCENT - raduis * WIDTH_PERCENT / 2)
//        return if (percent >= 1f) {
//            0
//        } else {
//            (MIN_ALPHA * (1f - percent)).toInt()
//        }
//    }
//}
//
